<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue中的数据代理</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!-- 
    1.Vue中的数据代理:
    通过vm对象来代理data对象中属性的操作(读/写)2.Vue中数据代理的好处:
    更加方便的操作data中的数据3.基本原理:
    通过object.defineProperty()把data对象中所有属性添加到vm上.为每一个添加到vm上的属性，都指定一个getter/setter。
    在getter/setter内部去操作（读/写）data中对应的属性。
  -->   

    <div id="root">
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
    
</body>
<script>
    /* let data = {
        name:'School',
        address:'Address',
    } */
    // vm._data === options.data === data
    const vm = new Vue({
        el:'#root',
        data:{
            name:'School',
            address:'Address',
        }
        // data
    });
    console.log(vm);
// 在实例的最下面还有着两个属性的 set和get 方法 
// 现在我们得知这两个属性是由Object.defineProperty()添加上去的
// 所以当我们通过vm读name的时候实际读的就是data中的name 当我们改的时候改的也是data中的name



// 你好，想讨论一个问题。用了_data拷贝了一份data数据，然后又用name和address分别代理_data中的name和address。
// 那为什么不一开始就直接把data中的name和address挂载到vm上呢？请问_data的作用是什么呢？

// 因为_data是用来做数据劫持的，你不仅要实现改data的时候vm要跟着变，还要监听data数据改的那个时机，然后在这个时候通知vue去重新渲染页面。
    

</script>
</html>